const { EvaluateModel, OrderModel, UserModel } = require('../../models/index')

// 用户提交评价信息
const userSubmitEvaluate = async (req, res) => {
  try {
    // 从请求体中获取评价信息
    let { orderID, userID, rating, comment } = req.body;

    // 校验必要参数
    if (!orderID || !userID || !rating) {
      return res.status(400).json({ error: '必要参数缺失！' });
    }

    orderID = parseInt(orderID, 10)
    userID = parseInt(userID, 10)

    // 可选：检查订单是否存在
    const order = await OrderModel.findOne({ where: { order_id: orderID } });
    if (!order) {
      return res.status(404).json({ error: '订单不存在' });
    }

    // 可选：确保当前用户是订单的所有者
    if (order.user_id !== userID) {
      return res.status(403).json({ error: '订单与当前用户不匹配' });
    }

    // 可选：如果每个订单只允许评价一次，检查是否已评价
    const existingEvaluation = await EvaluateModel.findOne({ where: { order_id: orderID } });
    if (existingEvaluation) {
      return res.status(400).json({ error: '该订单已评价' });
    }

    // 创建评价记录
    const evaluation = await EvaluateModel.create({
      order_id: orderID,
      user_id: userID,
      rating: rating,
      comment: comment,
    });

    // 更新订单状态为已完成
    await OrderModel.update(
      { status: 4 },
      { where: { order_id: orderID } }
    );

    return res.status(200).json({
      title: '评价提交成功',
      data: evaluation
    });
  } catch (error) {
    return res.status(500).json({ error: error.message });
  }
};

// 获取用户评价信息
const getUserEvaluate = async (req, res) => {
  try {
    // 获取用户ID
    const userID = req.params.userID

    // 用户ID为空
    if (!userID) {
      return res.status(400).json({ error: '用户ID不能为空！' })
    }

    // 查找用户的评价记录
    const evaluateInfo = await EvaluateModel.findAll({
      where: {
        user_id: userID
      },
      include: [
        {
          model: UserModel,
          as: 'user',
          attributes: ['avatar', 'username']
        }, {
          model: OrderModel,
          as: 'order',
          attributes: ['order_type', 'place_name', 'product_type', 'quantity', 'description', 'total_amount', 'travel_start_date', 'travel_end_date']
        }
      ],
    })

    // 返回评价信息查找成功时的响应
    res.status(200).json({
      title: '用户评价信息',
      data: evaluateInfo
    })

  } catch (error) {
    return res.status(500).json({ error: error.message })
  }
}



module.exports = {
  userSubmitEvaluate,
  getUserEvaluate
}